package br.com.opet.DAO;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import br.com.opet.vo.*;

public class ProdutoDAO {
	public static boolean insert(Produto produto)
	{
		try{
			EntityManager manager = EntityManagerFactory.getInstance();
			manager.getTransaction().begin();
			manager.persist(produto);
			manager.getTransaction().commit();
			return true;			
		}
		catch(Exception e){
			return false;
		}
	}
	
	public static Produto SearchById(int idProduto)
	{
		try
		{
			EntityManager manager = EntityManagerFactory.getInstance();
			Query q = manager.createQuery("from Produto where id = :idP");
			q.setParameter("idP", idProduto);
			List<Produto> produtos = q.getResultList();
			if(!produtos.isEmpty()){
				return produtos.get(0);								
			}
			else
			{
				return null;
			}
		}
		catch(Exception e)
		{
			return null;
		}		
	}
	
	public static List<Produto> SearchByName(Produto produto)
	{
		try
		{
			EntityManager manager = EntityManagerFactory.getInstance();
			Query q = manager.createQuery("from Produto where nome like :nomeP");
			q.setParameter("nomeP", "%"+produto.getNome()+"%");
			List<Produto> produtos = q.getResultList();
			if(!produtos.isEmpty()){
				return produtos;
			}
			else
			{
				return null;
			}
		}
		catch(Exception e)
		{
			return null;
		}		
	}
	
	public static List<Produto> listAll()
	{
		try
		{
			EntityManager manager = EntityManagerFactory.getInstance();
			Query q = manager.createQuery("from Produto order by quantidade desc, nome");
			List<Produto> produtos = q.getResultList();
			if(!produtos.isEmpty()){
				return produtos;								
			}
			else
			{
				return null;
			}
		}
		catch(Exception e)
		{
			return null;
		}		
	}
	
	public static boolean remove(int idProduto)
	{
		try{
			Produto produto = SearchById(idProduto);		
			EntityManager manager = EntityManagerFactory.getInstance();
			manager.getTransaction().begin();
			manager.remove(produto);
			manager.getTransaction().commit();
			return true;			
		}
		catch(Exception e){
			return false;
		}
	}
}
